Skip to content

feat(pm-dashboard-backup): per-step run ledger in .last-run.json (#1854 rule 2) - #4058

Merged
dezren39 merged 2 commits into
mainfrom
queue/5072-1854-backup-ledger
Nov 1, 2026
Merged

dezren39 merged 2 commits into
mainfrom
queue/5072-1854-backup-ledger

Conversation

@dezren39

@dezren39 dezren39 commented Nov 1, 2026 •

Copy link
Copy Markdown
Member

Refs #1854 (task 5072) — implements rule 2 (one failure ledger per run) for pm-dashboard-backup, the remaining dashboard gap named in the task packet. The design epic stays open for its other jobs/phases.

What

nixos/home/pm-dashboard-backup.sh now keeps one ordered run ledger over the material steps — validate-date, credentials, db-dump, local-archive, r2-upload, drive-upload — with outcomes not-attempted -> in-progress -> ok | failed, plus not-applicable for the one named tolerated case (the optional #1514 DB-dump script being absent; a present dump script is required and its failure fails the step).

write_record serializes the ledger as a steps array in .last-run.json and derives the record's result/failing_step from it: an in-progress step on a failed exit becomes the failing step, and on any exit the first required step that is not ok (db-dump: not ok and not not-applicable) makes the run failed — so a failed or interrupted step cannot be recorded as complete even on a zero exit code. Existing fields (failing_step, destinations, sha, timestamps) and the expected-set manifest, destination verification, retention, and watchdog contract are unchanged.

Tests

On the laptop:

  • pm-dashboard-backup-record.test.sh — all passed, now 6 scenarios: happy (full ledger, db-dump not-applicable), R2 failure (r2-upload failed, drive not-attempted), SIGTERM during credentials (credentials failed, later steps not-attempted, exit 143), Drive failure, failing dump script (db-dump failed, local-archive not-attempted), working dump script (db-dump ok).
  • pm-dashboard-backup-manifest.test.sh, pm-dashboard-backup.test.sh, pm-dashboard-backup-copy.test.sh, pm-dashboard-backup-date.test.sh, pm-dashboard-backup-prune.test.sh — all passed unchanged.

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@dezren39
dezren39 requested a review from a team as a code owner November 1, 2026 23:04
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-01T23:14:58.512487Z 2312221 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 56 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 7f9966c2-de45-4923-9c6d-d8de323339b9
Commits

Reviewing files that changed from the base of the PR and between df3f836 and 2312221.

Files selected for processing: 2
  • nixos/home/pm-dashboard-backup-record.test.sh
  • nixos/home/pm-dashboard-backup.sh
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ea49a1e1ba

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread nixos/home/pm-dashboard-backup.sh Outdated
Comment on lines +112 to +114
elif [ "$_name" = "db-dump" ]; then
{ [ "$_outcome" != "ok" ] && [ "$_outcome" != "not-applicable" ]; } && failing="$_name"
elif [ "$rc" -eq 0 ] && [ "$_outcome" != "ok" ]; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the actual failure step for early setup errors

When setup fails before ledger_begin credentials (for example, when bws is missing), this branch selects db-dump as the failing step even though its outcome is not-attempted. Unlike the other steps, this check treats an untouched DB-dump step as the failure regardless of the exit code, overriding the existing STEP fallback. Reproducing the missing-bws case produces failing_step: "db-dump", which the laptop-backups watchdog then reports as the cause. Only use incomplete steps to derive a failure on a zero exit, or otherwise preserve the actual setup failure rather than blaming an unattempted dump.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in the follow-up commit: the incomplete-step derivation (including the db-dump branch) now only applies on a zero exit. On a failed exit, the failing step is the in-progress step converted to failed, or the existing $STEP fallback. Verified the missing-bws repro directly: the record now shows failing_step "validate-date" with db-dump "not-attempted" (previously "db-dump"). The record suite passes.

local dump_script="$home/no-such-dump-script.sh"
if [[ "$dump_mode" == "ok" ]]; then
dump_script="$home/dump-ok.sh"
printf '#!/usr/bin/env bash\nmkdir -p "$HOME/backups/db-dumps/$1"\nprintf "{}\\n" > "$HOME/backups/db-dumps/$1/dump.sql"\n' >"$dump_script"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use the resolved Bash path in generated dump fixtures

In the Nix build sandbox, /usr/bin/env is unavailable, so the newly generated dump scripts cannot execute. The existing laptop-backups-pm-dashboard-backup-record flake check in lib/default.nix copies the sources and runs this suite directly without patching shebangs; consequently, the dumpok scenario fails at the DB-dump step instead of completing, breaking that check. Generate these shebangs from $BASH, as the other executable stubs in this suite already do, including the failing-dump fixture.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in the follow-up commit: both generated dump fixtures (ok and failing) now build their shebang from $BASH via printf "#!%s\n" "$BASH", matching the other executable stubs in this suite, so they execute in the Nix build sandbox where /usr/bin/env is unavailable. The record suite passes.

…b-dump for early setup failures; dump fixtures use resolved bash path
@dezren39

dezren39 commented Nov 1, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

Reviewed commit: 23122218a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@dezren39
dezren39 merged commit c3fda1c into main Nov 1, 2026
1 check passed
@dezren39
dezren39 deleted the queue/5072-1854-backup-ledger branch November 1, 2026 23:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant